import functools


def decorator(func):
    """我是一级备注"""

    @functools.wraps(func)  # 保留原函数的信息, inner.__name__= func.__name__
    def inner(*args, **kwargs):  # 接受任意参数

        """我是二级备注"""
        print("before")
        nei = func(*args, **kwargs)  # 执行原来的函数
        print("after")
        return nei

    return inner


def func1():
    """我是函数func1备注"""
    print("niuniuniu")


@decorator
def func2():
    """我是函数func2备注"""
    print("niuniuniu")


# 没加装饰器
print(func1.__name__)  # func1
print(func1.__doc__)  # 我是函数func1备注

# 加了装饰器，没加functools
print(func2.__name__)  # inner
print(func2.__doc__)  # 我是二级备注

# 加了装饰器，添加functools
print(func2.__name__)  # func2
print(func2.__doc__)  # 我是函数func2备注
